home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 03 - 1987 / 03.10 Oct 87 / DrawPict Source / MacDrawFiles.BAS < prev    next >
Encoding:
BASIC Source File  |  1987-06-20  |  14.8 KB  |  720 lines  |  [TEXT/ZBAS]

  1. REM
  2. REM  (MacDrawFiles.BAS)
  3. REM
  4. REM  CREATES A 'MACDRAW(PICT)' TEXT-FILE & GRAPHICS-FILE
  5. REM
  6. REM  REFER TO Macintosh Technical Note #27: MacDraw's PICT File
  7. REM  Format and Comments, August 20, 1986 BY Ginger Jernigan;
  8. REM  #21: QuickDraw's Internal Picture Definition, June 20, 1986
  9. REM  BY Ginger Jernigan; AND #91: Optimizing for the LaserWriter
  10. REM  —Picture Comments, March 2, 1987 BY Ginger Jernigan 
  11. REM
  12. REM  DISABLE ZBASIC'S DEFAULT WINDOW
  13. REM
  14. WINDOW OFF
  15. REM
  16. REM  SET THE COORDINATE SYSTEM TO WINDOW 'PIXEL' COORDINATES
  17. REM
  18. COORDINATE WINDOW
  19. REM
  20. REM  ESTABLISH A 'STATUS' WINDOW
  21. REM
  22. WINDOW #1,"MacDrawFiles.BAS",(4,41)-(506,337),261
  23. CALL MOVETO(144,50)
  24. PRINT "Now creating the 'MacDraw' files . . ."
  25. REM
  26. REM  DEFINE 'SHORT' PICCOMMENTS
  27. REM
  28. NIL&=0
  29. noData%=0
  30. picDwgBeg%=130
  31. picDwgEnd%=131
  32. PolyBegin%=160
  33. PolyEnd%=161
  34. picPlyClo%=165
  35. REM
  36. REM  READ-IN SELECTED FONT FAMILIES
  37. REM
  38. DIM fontNo%(13),fontName$(13)
  39. FOR I%=1 TO 13
  40. READ fontNo%(I%),fontName$(I%)
  41. NEXT I%
  42. REM
  43. REM  READ-IN ALL 8 'MACDRAW' FONT SIZES
  44. REM
  45. DIM fontSize%(8)
  46. FOR I%=1 TO 8
  47. READ fontSize%(I%)
  48. NEXT I%
  49. REM
  50. REM  READ-IN ALL 6 'MACDRAW' FONT STYLES
  51. REM
  52. DIM fontStyle%(6),fontStyle$(6)
  53. FOR I%=1 TO 6
  54. READ fontStyle%(I%),fontStyle$(I%)
  55. NEXT I%
  56. REM
  57. REM  READ-IN ALL 36 'MACDRAW' FILL/PEN PATTERNS AS HEX STRINGS
  58. REM
  59. DIM MacDrawPat$(36)
  60. FOR I%=1 TO 36
  61. READ patID%,MacDrawPat$(I%)
  62. NEXT I%
  63. REM
  64. REM  READ-IN ALL 5 'MACDRAW' LINE WEIGHTS
  65. REM
  66. DIM penWidth%(5),penHeight%(5)
  67. FOR I%=1 TO 5
  68. READ penWidth%(I%),penHeight%(I%)
  69. NEXT I%
  70. REM
  71. REM  DEFINE PICTURE RECTANGLE (A FULL-SIZE 'MACDRAW' PAGE)
  72. REM
  73. picRect=0.
  74. picTop%=0
  75. picLeft%=0
  76. picBottom%=720
  77. picRight%=576
  78. REM
  79. REM  'INITIALIZE' QUICKDRAW RECTANGLE
  80. REM
  81. DIM qdRect,qdTop%,qdLeft%,qdBottom%,qdRight%
  82. REM
  83. REM  'INITIALIZE' QUICKDRAW 'FILL' PATTERN
  84. REM
  85. DIM fillPat,row12%,row34%,row56%,row78%
  86. fillPatPtr&=VARPTR(fillPat)
  87. REM
  88. REM  'INITIALIZE' PICTURE
  89. REM
  90. CALL SETRECT(picRect,picLeft%,picTop%,picRight%,picBottom%)
  91. REM
  92. REM  CREATE A 'MACDRAW' TEXT-DEMO FILE & A GRAPHICS-DEMO FILE
  93. REM
  94. FOR File%=1 TO 2
  95. PicHand&=FN OPENPICTURE(picRect)
  96. REM
  97. REM  'BEGIN' A 'MACDRAW' PICTURE
  98. REM
  99. CALL PICCOMMENT(picDwgBeg%,noData%,NIL&)
  100. REM
  101. REM  CHECK FOR TEXT(File%=1) OR GRAPHICS(File%=2)
  102. REM
  103. IF File%=2 THEN "graphics"
  104. REM
  105. REM  . . . CREATE TEXT FILE . . .
  106. REM
  107. "text"
  108. REM
  109. REM  * * 'SAMPLE' FONT FAMILIES (USE 12 PT BOLD) * *
  110. REM
  111. x%=10
  112. FOR I%=1 TO 13
  113. y%=25*(I%+1)
  114. CALL MOVETO(x%,y%)
  115. TEXT fontNo%(I%),fontSize%(3),fontStyle%(2),1
  116. CALL DRAWSTRING(fontName$(I%))
  117. CALL DRAWSTRING(" 12 pt Bold")
  118. NEXT I%
  119. REM
  120. REM  * * 'SAMPLE' FONT STYLES (USE 'HELVETICA' 12 PT) * *
  121. REM
  122. x%=180
  123. FOR I%=1 TO 6
  124. y%=25*(I%+1)
  125. CALL MOVETO(x%,y%)
  126. TEXT fontNo%(4),fontSize%(3),fontStyle%(I%),1
  127. CALL DRAWSTRING(fontName$(4))
  128. CALL DRAWSTRING(" 12 pt ")
  129. CALL DRAWSTRING(fontStyle$(I%))
  130. NEXT I%
  131. y%=y%+25
  132. CALL MOVETO(x%,y%)
  133. Style%=0
  134. Style$=""
  135. FOR I%=2 TO 6
  136. Style%=Style%+fontStyle%(I%)
  137. Style$=Style$+fontStyle$(I%)+" "
  138. NEXT I%
  139. TEXT fontNo%(4),fontSize%(3),Style%,1
  140. CALL DRAWSTRING(fontName$(4))
  141. CALL DRAWSTRING(" 12 pt ")
  142. CALL DRAWSTRING(Style$)
  143. REM
  144. REM  * * 'SAMPLE' FONT SIZES (USE 'HELVETICA' BOLD) * *
  145. REM
  146. x%=10
  147. yold%=391
  148. FOR I%=1 TO 8
  149. y%=yold%+fontSize%(I%)
  150. yold%=y%
  151. CALL MOVETO(x%,y%)
  152. TEXT fontNo%(4),fontSize%(I%),fontStyle%(2),1
  153. CALL DRAWSTRING(fontName$(4))
  154. CALL DRAWSTRING("")
  155. Size$=STR$(fontSize%(I%))
  156. CALL DRAWSTRING(Size$)
  157. CALL DRAWSTRING(" pt Bold")
  158. NEXT I%
  159. GOTO "EndPicture"
  160. REM
  161. REM  . . . CREATE GRAPHICS FILE . . .
  162. REM
  163. "graphics"
  164. REM
  165. REM  * * 'SAMPLE' ALL 36 'MACDRAW' FILL PATTERNS * *
  166. REM  NOTE: FILL & FRAME ARE 'GROUPED' AUTOMATICALLY
  167. REM
  168. FOR I%=1 TO 3
  169. qdBottom%=20
  170. FOR J%=1 TO 12
  171. K%=(I%-1)*12+J%
  172. qdTop%=qdBottom%+5
  173. qdLeft%=10+(I%-1)*30
  174. qdBottom%=qdTop%+25
  175. qdRight%=qdLeft%+25
  176. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  177. CALL STUFFHEX(fillPatPtr&,MacDrawPat$(K%))
  178. IF K%>1 CALL FILLRECT(qdRect,fillPat)
  179. CALL FRAMERECT(qdRect)
  180. NEXT J%
  181. NEXT I%
  182. REM
  183. REM  * * 'SAMPLE' ALL 5 'MACDRAW' LINE WEIGHTS * *
  184. REM
  185. TEXT fontNo%(4),fontSize%(1),fontStyle%(2),1
  186. x%=150
  187. FOR I%=1 TO 5
  188. y%=10+30*I%
  189. CALL MOVETO(x%,y%)
  190. Width$=STR$(penWidth%(I%))
  191. Height$=STR$(penHeight%(I%))
  192. Note$="  Line Width,Height = "+Width$+","+Height$
  193. CALL DRAWSTRING(Note$)
  194. CALL MOVE(10,-penHeight%(I%))
  195. CALL PENSIZE(penWidth%(I%),penHeight%(I%))
  196. CALL LINE(41-penWidth%(I%),0)
  197. CALL PENNORMAL
  198. NEXT I%
  199. REM
  200. REM  * * 'SAMPLE' ALL 3 'MACDRAW' ARROWHEADS * *
  201. REM
  202. REM  USE HORIZ LINES
  203. REM
  204. dx%=50
  205. dy%=0
  206. x%=90
  207. REM
  208. REM  USE RIGHT(I%=1), LEFT(I%=2), & BOTH(I%=3) ARROWHEADS
  209. REM
  210. FOR I%=1 TO 3
  211. x%=x%+65
  212. REM
  213. REM  USE ALL 5 LINE WEIGHTS
  214. REM
  215. FOR J%=1 TO 5
  216. y%=150+30*J%
  217. CALL PENSIZE(penWidth%(J%),penHeight%(J%))
  218. xahl1%=x%
  219. yahl1%=y%
  220. xahl2%=x%+dx%
  221. yahl2%=y%+dy%
  222. REM
  223. REM  ADJUST LENGTHS FOR PENSIZE
  224. REM
  225. IF I%=1 THEN xahl2%=xahl2%+1-penWidth%(J%)
  226. IF I%=2 THEN xahl1%=xahl1%+1
  227. ArrwPt%=I%
  228. GOSUB "ArrowHeads"
  229. NEXT J%
  230. NEXT I%
  231. REM
  232. REM  USE VERT LINES
  233. REM
  234. dx%=0
  235. dy%=50
  236. y%=270
  237. REM
  238. REM  USE RIGHT(I%=1), LEFT(I%=2), & BOTH(I%=3) ARROWHEADS
  239. REM
  240. FOR I%=1 TO 3
  241. y%=y%+65
  242. REM
  243. REM  USE ALL 5 LINE WEIGHTS
  244. REM
  245. FOR J%=1 TO 5
  246. x%=140+30*J%
  247. CALL PENSIZE(penWidth%(J%),penHeight%(J%))
  248. xahl1%=x%
  249. yahl1%=y%
  250. xahl2%=x%+dx%
  251. yahl2%=y%+dy%
  252. REM
  253. REM  ADJUST LENGTHS FOR PENSIZE
  254. REM
  255. IF I%<>2 THEN yahl1%=yahl1%-1
  256. IF I%=1 THEN yahl2%=yahl2%-penHeight%(J%)
  257. ArrwPt%=I%
  258. GOSUB "ArrowHeads"
  259. NEXT J%
  260. NEXT I%
  261. REM
  262. REM  USE 45 DEG. LINES
  263. REM
  264. dx%=INT(50./SQR(2.))
  265. dy%=INT(50./SQR(2.))
  266. y%=490
  267. REM
  268. REM  USE RIGHT(I%=1), LEFT(I%=2), & BOTH(I%=3) ARROWHEADS
  269. REM
  270. FOR I%=1 TO 3
  271. y%=y%+50
  272. REM
  273. REM  USE ALL 5 LINE WEIGHTS
  274. REM
  275. FOR J%=1 TO 5
  276. x%=125+30*J%
  277. CALL PENSIZE(penWidth%(J%),penHeight%(J%))
  278. xahl1%=x%
  279. yahl1%=y%
  280. xahl2%=x%+dx%
  281. yahl2%=y%+dy%
  282. REM
  283. REM  ADJUST LENGTHS FOR PENSIZE
  284. REM
  285. IF I%=1 THEN "df1"
  286. IF I%=2 THEN "df2"
  287. GOTO "df3"
  288. "df1"    xahl2%=xahl2%-1-INT(penWidth%(J%)/SQR(2.))
  289. yahl2%=yahl2%-1-INT(penHeight%(J%)/SQR(2.))
  290. IF J%<5 THEN "df3"
  291. xahl2%=xahl2%+1
  292. yahl2%=yahl2%+1
  293. GOTO "df3"
  294. "df2"    xahl1%=xahl1%+1+INT(penWidth%(J%)/SQR(2.))
  295. yahl1%=yahl1%+1+INT(penHeight%(J%)/SQR(2.))
  296. IF J%<3 THEN "df3"
  297. xahl1%=xahl1%-1
  298. yahl1%=yahl1%-1
  299. IF J%<5 THEN "df3"
  300. xahl1%=xahl1%-1
  301. yahl1%=yahl1%-1
  302. "df3"    ArrwPt%=I%
  303. GOSUB "ArrowHeads"
  304. NEXT J%
  305. NEXT I%
  306. CALL PENNORMAL
  307. REM
  308. REM  * * 'SAMPLE' ALL 36 'MACDRAW' PEN PATTERNS * *
  309. REM
  310. CALL PENSIZE(penWidth%(5),penHeight%(5))
  311. FOR I%=1 TO 3
  312. y%=5
  313. FOR J%=1 TO 12
  314. K%=(I%-1)*12+J%
  315. x%=385+(I%-1)*50
  316. y%=y%+30
  317. CALL MOVETO(x%,y%)
  318. CALL STUFFHEX(fillPatPtr&,MacDrawPat$(K%))
  319. CALL PENPAT(fillPat)
  320. CALL LINE(40,0)
  321. NEXT J%
  322. NEXT I%
  323. CALL PENNORMAL
  324. REM
  325. REM  * * 'SAMPLE' ALL 8 GRAPHICS 'TOOLS' * *
  326. REM
  327. CALL PENSIZE(penWidth%(3),penHeight%(3))
  328. REM
  329. REM  USE ORTHOGONAL LINES
  330. REM
  331. CALL MOVETO(10,420)
  332. CALL LINETO(50,420)
  333. CALL MOVETO(80,400)
  334. CALL LINETO(80,440)
  335. CALL MOVETO(110,400)
  336. CALL LINETO(150,440)
  337. REM
  338. REM  USE UNCONSTRAINED LINES
  339. REM
  340. CALL MOVETO(10,450)
  341. CALL LINETO(75,490)
  342. CALL MOVETO(85,490)
  343. CALL LINETO(150,450)
  344. REM
  345. REM  USE RECTANGLES
  346. REM
  347. qdTop%=510
  348. qdLeft%=10
  349. qdBottom%=qdTop%+40
  350. qdRight%=qdLeft%+40
  351. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  352. CALL FRAMERECT(qdRect)
  353. qdTop%=520
  354. qdLeft%=60
  355. qdBottom%=qdTop%+20
  356. qdRight%=qdLeft%+60
  357. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  358. CALL FRAMERECT(qdRect)
  359. qdTop%=500
  360. qdLeft%=130
  361. qdBottom%=qdTop%+60
  362. qdRight%=qdLeft%+20
  363. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  364. CALL FRAMERECT(qdRect)
  365. REM
  366. REM  USE ROUNDED-CORNER RECTANGLES
  367. REM
  368. ovalWidth%=20
  369. ovalHeight%=20
  370. qdTop%=580
  371. qdLeft%=10
  372. qdBottom%=qdTop%+40
  373. qdRight%=qdLeft%+40
  374. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  375. CALL FRAMEROUNDRECT(qdRect,ovalWidth%,ovalHeight%)
  376. qdTop%=590
  377. qdLeft%=60
  378. qdBottom%=qdTop%+20
  379. qdRight%=qdLeft%+60
  380. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  381. CALL FRAMEROUNDRECT(qdRect,ovalWidth%,ovalHeight%)
  382. qdTop%=570
  383. qdLeft%=130
  384. qdBottom%=qdTop%+60
  385. qdRight%=qdLeft%+20
  386. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  387. CALL FRAMEROUNDRECT(qdRect,ovalWidth%,ovalHeight%)
  388. REM
  389. REM  USE OVALS
  390. REM
  391. qdTop%=650
  392. qdLeft%=10
  393. qdBottom%=qdTop%+40
  394. qdRight%=qdLeft%+40
  395. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  396. CALL FRAMEOVAL(qdRect)
  397. qdTop%=660
  398. qdLeft%=60
  399. qdBottom%=qdTop%+20
  400. qdRight%=qdLeft%+60
  401. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  402. CALL FRAMEOVAL(qdRect)
  403. qdTop%=640
  404. qdLeft%=130
  405. qdBottom%=qdTop%+60
  406. qdRight%=qdLeft%+20
  407. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  408. CALL FRAMEOVAL(qdRect)
  409. REM
  410. REM  USE ARCS
  411. REM
  412. startAngle%=225
  413. arcAngle%=150
  414. qdTop%=410
  415. qdLeft%=385
  416. qdBottom%=qdTop%+40
  417. qdRight%=qdLeft%+40
  418. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  419. CALL FRAMEARC(qdRect,startAngle%,arcAngle%)
  420. qdTop%=420
  421. qdLeft%=435
  422. qdBottom%=qdTop%+20
  423. qdRight%=qdLeft%+60
  424. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  425. CALL FRAMEARC(qdRect,startAngle%,arcAngle%)
  426. qdTop%=400
  427. qdLeft%=505
  428. qdBottom%=qdTop%+60
  429. qdRight%=qdLeft%+20
  430. CALL SETRECT(qdRect,qdLeft%,qdTop%,qdRight%,qdBottom%)
  431. CALL FRAMEARC(qdRect,startAngle%,arcAngle%)
  432. REM
  433. REM  USE THE 'FREEHAND' TOOL ('MACDRAW' USES A POLYGON)
  434. REM
  435. PolyHandle&=FN OPENPOLY
  436. PI=4.*ATN(1.)
  437. PIO20=PI/20.
  438. THETA=0.
  439. R=50.*COS(2.*THETA)
  440. X%=455+INT(R*COS(THETA))
  441. Y%=510+INT(R*SIN(THETA))
  442. CALL MOVETO(X%,Y%)
  443. FOR I%=1 TO 20
  444. THETA=I%*PIO20
  445. R=50.*COS(2.*THETA)
  446. X%=455+INT(R*COS(THETA))
  447. Y%=510+INT(R*SIN(THETA))
  448. CALL LINETO(X%,Y%)
  449. NEXT I%
  450. CALL CLOSEPOLY
  451. CALL FRAMEPOLY(PolyHandle&)
  452. CALL KILLPOLY(PolyHandle&)
  453. REM
  454. REM  USE A POLYGON
  455. REM
  456. PolyHandle&=FN OPENPOLY
  457. CALL MOVETO(385,540)
  458. CALL LINETO(385,575)
  459. CALL LINETO(485,600)
  460. CALL LINETO(525,540)
  461. CALL LINETO(435,565)
  462. CALL CLOSEPOLY
  463. CALL FRAMEPOLY(PolyHandle&)
  464. CALL KILLPOLY(PolyHandle&)
  465. REM
  466. REM  USE A 'FORCED-CLOSE' POLYGON
  467. REM  NOTE: THE 'PICCOMMENTS' WILL FORCE CLOSURE
  468. REM
  469. CALL PICCOMMENT(PolyBegin%,noData%,NIL&)
  470. CALL PICCOMMENT(picPlyClo%,noData%,NIL&)
  471. CALL MOVETO(385,610)
  472. CALL LINETO(385,645)
  473. CALL LINETO(485,670)
  474. CALL LINETO(525,610)
  475. CALL LINETO(435,635)
  476. CALL LINETO(385,610)
  477. CALL PICCOMMENT(PolyEnd%,noData%,NIL&)
  478. CALL PENNORMAL
  479. REM
  480. REM  'END' A 'MACDRAW' PICTURE
  481. REM
  482. "EndPicture"
  483. CALL PICCOMMENT(picDwgEnd%,noData%,NIL&)
  484. REM
  485. REM  CREATE THE 'MACDRAW' PICT FILE
  486. REM
  487. CURSOR=4
  488. DEF OPEN "PICTMDRW"
  489. IF File%=1 THEN OPEN "O",#1,"MacDraw.text"
  490. IF File%=2 THEN OPEN "O",#1,"MacDraw.graphics"
  491. REM
  492. REM  WRITE-OUT A 512 BYTE (256 WORDS OR INTEGERS) HEADER OF ZEROES
  493. REM
  494. A%=0
  495. FOR I%=1 TO 256
  496. WRITE #1,A%
  497. NEXT I%
  498. REM
  499. REM  CLOSE THE PICTURE & WRITE-OUT THE 'PICT' DATA
  500. REM
  501. CALL CLOSEPICTURE
  502. PicPtr&=PEEK LONG(PicHand&)
  503. PicLength%=PEEK WORD(PicPtr&+0)
  504. NumWords%=PicLength%/2
  505. doubleNumWords%=2*NumWords%
  506. IF doubleNumWords%<PicLength% THEN NumWords%=NumWords%+1
  507. FOR I%=1 TO NumWords%
  508. J%=2*(I%-1)
  509. A%=PEEK WORD(PicPtr&+J%)
  510. WRITE #1,A%
  511. NEXT I%
  512. CALL KILLPICTURE(PicHand&)
  513. CLOSE #1
  514. CURSOR=0
  515. NEXT File%
  516. GOTO "Exit"
  517. REM
  518. REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  519. "ArrowHeads"
  520. REM
  521. REM  SUBROUTINE TO CONSTRUCT A 'MACDRAW' ARROWHEAD(S) LINE
  522. REM
  523. REM  DEFINE ARROWHEAD PARAMETERS
  524. REM
  525. DIM ArrwRect,ArrwRT%,ArrwRL%,ArrwRB%,ArrwRR%
  526. NIL&=0
  527. noData%=0
  528. picArrwR%=170
  529. picArrwL%=171
  530. picArrwB%=172
  531. picArrwEnd%=173
  532. arcAngle%=48
  533. REM
  534. REM  GET PEN SIZE & ARROWHEAD RECTANGLE SIZE
  535. REM
  536. DIM pnLocV%,pnLocH%,pnSizeV%,pnSizeH%,pnMode%
  537. DIM pnPat12%,pnPat34%,pnPat56%,pnPat78%
  538. CALL GETPENSTATE(pnLocV%)
  539. IF pnSizeV%=0 THEN RETURN
  540. IF pnSizeV%=1 THEN ArrwWH%=20
  541. IF pnSizeV%=2 THEN ArrwWH%=30
  542. IF pnSizeV%=4 THEN ArrwWH%=40
  543. IF pnSizeV%=6 THEN ArrwWH%=50
  544. REM
  545. REM  DETERMINE LINE PROPERTIES
  546. REM
  547. dxahl=xahl2%-xahl1%
  548. dyahl=yahl2%-yahl1%
  549. lineLength=SQR(dxahl*dxahl+dyahl*dyahl)
  550. xcorr%=INT((dyahl/lineLength)*pnSizeV%/2)
  551. ycorr%=INT(ABS(dxahl/lineLength)*pnSizeV%/2)
  552. IF xahl1%=xahl2% THEN "ah1"
  553. tanAnglw=dyahl/dxahl
  554. Angle=57.2957795*ATN(tanAngle)
  555. IF xahl1%>xahl2% THEN Angle=Angle+180.
  556. lineAngle%=INT(Angle)+90
  557. GOTO "ah3"
  558. "ah1"    IF yahl1%>yahl2% THEN "ah2"
  559. lineAngle%=90+90
  560. GOTO "ah3"
  561. "ah2"    lineAngle%=-90+90
  562. REM
  563. REM  DETERMINE WHICH ARROWHEAD(S) TO DRAW
  564. REM  (ArrwPt%=1 FOR PT 1, 2 FOR 2, 3 FOR BOTH)
  565. REM
  566. "ah3"    short=(ArrwWH%/2)/lineLength
  567. IF ArrwPt%=2 THEN "ah4"
  568. REM
  569. REM  ARROWHEAD AT PT 1
  570. REM
  571. bothFlag%=1
  572. xahlc%=xahl1%
  573. yahlc%=yahl1%
  574. xahl1%=xahlc%+INT(short*dxahl)
  575. yahl1%=yahlc%+INT(short*dyahl)
  576. startAngle%=lineAngle%-arcAngle%/2
  577. IF xahl1%>xahl2% THEN "ah6"
  578. IF xahl1%<xahl2% THEN "ah5"
  579. IF yahl1%>yahl2% THEN "ah6"
  580. GOTO "ah5"
  581. REM
  582. REM  ARROWHEAD AT PT 2
  583. REM
  584. "ah4"    bothFlag%=2
  585. xahlc%=xahl2%
  586. yahlc%=yahl2%
  587. xahl2%=xahlc%-INT(short*dxahl)
  588. yahl2%=yahlc%-INT(short*dyahl)
  589. startAngle%=lineAngle%+180-arcAngle%/2
  590. IF startAngle%>360 THEN startAngle%=startAngle%-360
  591. IF xahl1%<xahl2% THEN "ah6"
  592. IF xahl1%>xahl2% THEN "ah5"
  593. IF yahl1%<yahl2% THEN "ah6"
  594. "ah5"    picArrw%=picArrwL%
  595. IF ArrwPt%=3 THEN picArrw%=picArrwB%
  596. GOTO "ah7"
  597. "ah6"    picArrw%=picArrwR%
  598. IF ArrwPt%=3 THEN picArrw%=picArrwB%
  599. REM
  600. REM  'QUICKDRAW' THE ARROWHEAD(S) WITH 'PAINTARC' &
  601. REM  USE PICCOMMENTS TO 'TIE' IT(THEM) TO THE LINE
  602. REM
  603. "ah7"    ArrwRT%=yahlc%-ArrwWH%/2
  604. ArrwRB%=ArrwRT%+ArrwWH%
  605. ArrwRL%=xahlc%-ArrwWH%/2
  606. ArrwRR%=ArrwRL%+ArrwWH%
  607. CALL SETRECT(ArrwRect,ArrwRL%,ArrwRT%,ArrwRR%,ArrwRB%)
  608. IF ArrwPt%<3 THEN "ah8"
  609. IF bothFlag%<2 THEN "ah8"
  610. GOTO "ah9"
  611. "ah8"    CALL PICCOMMENT(picArrw%,noData%,NIL&)
  612. "ah9"    CALL PAINTARC(ArrwRect,startAngle%,arcAngle%)
  613. IF ArrwPt%<3 THEN "ah10"
  614. IF bothFlag%<2 THEN "ah4"
  615. "ah10"    xahl1%=xahl1%-xcorr%
  616. yahl1%=yahl1%-ycorr%
  617. xahl2%=xahl2%-xcorr%
  618. yahl2%=yahl2%-ycorr%
  619. CALL MOVETO(xahl1%,yahl1%)
  620. CALL LINETO(xahl2%,yahl2%)
  621. CALL PICCOMMENT(picArrwEnd%,noData%,NIL&)
  622. RETURN
  623. REM
  624. REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  625. REM
  626. REM  DATA FOR SELECTED FONT FAMILIES
  627. REM
  628. DATA   0,"Chicago"
  629. DATA  22,"Courier"
  630. DATA   3,"Geneva"
  631. DATA  21,"Helvetica"
  632. DATA   6,"London"
  633. DATA   4,"Monaco"
  634. DATA  15,"N Helvetica Narrow"
  635. DATA   2,"New York"
  636. DATA  16,"Palatino"
  637. DATA  23,"Symbol"
  638. DATA  20,"Times"
  639. DATA   5,"Venice"
  640. DATA  18,"Zapf Chancery"
  641. REM
  642. REM  DATA FOR ALL 8 'MACDRAW' FONT SIZES
  643. REM
  644. DATA  9
  645. DATA 10
  646. DATA 12
  647. DATA 14
  648. DATA 18
  649. DATA 24
  650. DATA 36
  651. DATA 48
  652. REM
  653. REM  DATA FOR ALL 6 'MACDRAW' FONT STYLES
  654. REM
  655. DATA  0,"Plain Text"
  656. DATA  1,"Bold"
  657. DATA  2,"Italic"
  658. DATA  4,"Underline"
  659. DATA  8,"Outline"
  660. DATA 16,"Shadow"
  661. REM
  662. REM  DATA FOR ALL 36 'MACDRAW' FILL/PEN PATTERNS AS HEX STRINGS
  663. REM
  664. DATA  1,"0000000000000000"
  665. DATA  2,"0000000000000000"
  666. DATA  3,"FFFFFFFFFFFFFFFF"
  667. DATA  4,"77DD77DD77DD77DD"
  668. DATA  5,"AA55AA55AA55AA55"
  669. DATA  6,"8822882288228822"
  670. DATA  7,"8800220088002200"
  671. DATA  8,"8000080080000800"
  672. DATA  9,"8000000008000000"
  673. DATA 10,"8080413E080814E3"
  674. DATA 11,"FF808080FF080808"
  675. DATA 12,"8142241881422418"
  676. DATA 13,"8040201008040201"
  677. DATA 14,"E070381C0E0783C1"
  678. DATA 15,"77BBDDEE77BBDDEE"
  679. DATA 16,"8844221188442211"
  680. DATA 17,"99CC663399CC6633"
  681. DATA 18,"2040800008040200"
  682. DATA 19,"FF00FF00FF00FF00"
  683. DATA 20,"FF000000FF000000"
  684. DATA 21,"CC00000033000000"
  685. DATA 22,"F0F0F0F00F0F0F0F"
  686. DATA 23,"FF888888FF888888"
  687. DATA 24,"AA44AA11AA44AA11"
  688. DATA 25,"0102040810204080"
  689. DATA 26,"83070E1C3870E0C1"
  690. DATA 27,"EEDDBB77EEDDBB77"
  691. DATA 28,"1122448811224488"
  692. DATA 29,"3366CC993366CC99"
  693. DATA 30,"40A00000040A0000"
  694. DATA 31,"AAAAAAAAAAAAAAAA"
  695. DATA 32,"8888888888888888"
  696. DATA 33,"0101101001011010"
  697. DATA 34,"0008142A552A1408"
  698. DATA 35,"FF80808080808080"
  699. DATA 36,"8244281028448201"
  700. REM
  701. REM  DATA FOR ALL 5 'MACDRAW' LINE WEIGHTS
  702. REM
  703. DATA 0,0
  704. DATA 1,1
  705. DATA 2,2
  706. DATA 4,4
  707. DATA 6,6
  708. "Exit"
  709. WINDOW CLOSE #1
  710. WINDOW #1,"MacDrawFiles.BAS",(4,41)-(506,337),261
  711. TEXT 4,9,0,1
  712. CALL MOVETO(162,50)
  713. PRINT "Both 'MacDraw' files created ! !"
  714. CALL MOVETO(174,65)
  715. PRINT "Hit [Return] to exit . . ."
  716. BEEP
  717. INPUT ANS$
  718. WINDOW CLOSE #1
  719. END
  720.